home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / recio202.zip / rputf.c < prev    next >
C/C++ Source or Header  |  1994-05-05  |  2KB  |  70 lines

  1. /*****************************************************************************
  2.    MODULE: rputf.c
  3.   PURPOSE: recio character delimited floating point output functions
  4. COPYRIGHT: (C) 1994 William Pierpoint
  5.  COMPILER: Borland C Version 3.1
  6.        OS: MSDOS Version 6.2
  7.   VERSION: 2.02
  8.   RELEASE: May 5, 1994
  9. *****************************************************************************/
  10.  
  11. #include <float.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15.  
  16. #include "recio.h"
  17.  
  18. extern char *dtoa(double d, int dig, char *str);
  19. extern int _rstatus(REC *rp, int mode);
  20. extern int _rputc(REC *rp, int ch);
  21.  
  22. #define rfp(rp)          ((rp)->r_fp)
  23. #define rcol(rp)         ((rp)->r_colno)
  24. #define rfldch(rp)       ((rp)->r_fldch)
  25.  
  26. /****************************************************************************/
  27. static int                   /* return 0 on success; !0 on error            */
  28.     _rputd(                  /* output floating point number to rec stream  */
  29.         REC *rp,             /* pointer to record stream                    */
  30.         int dig,             /* number of significant digits                */
  31.         double num)          /* floating point number                       */
  32. /****************************************************************************/
  33.     int err=EOF;             /* return error (0=no error; !0=error) */
  34.     if (!_rstatus(rp, R_WRITE)) { 
  35.         rfldno(rp)++; 
  36.         /* if not first field, put field separator */
  37.         if (rfldno(rp) > 1) { 
  38.             err = _rputc(rp, rfldch(rp)); 
  39.             if (err) goto done; 
  40.         } 
  41.         dtoa(num, dig, _r_nsbuf); 
  42.         err = fputs(_r_nsbuf, rfp(rp)); 
  43.         if (err==EOF) { 
  44.             rseterr(rp, R_ENOPUT); 
  45.             goto done; 
  46.         } else { 
  47.             rcol(rp) += strlen(_r_nsbuf); 
  48.             err = 0; 
  49.             goto done; 
  50.         } 
  51.     } 
  52. done: 
  53.     return err; 
  54. }
  55.  
  56.  
  57. /****************************************************************************/
  58. /* character delimited floating point output functions                      */
  59. /****************************************************************************/
  60. int rputf(REC *rp, float num)
  61. {
  62.     return _rputd(rp, FLT_DIG, (double) num);
  63. }
  64.  
  65. int rputd(REC *rp, double num)
  66. {
  67.     return _rputd(rp, DBL_DIG, num);
  68. }
  69.